package com.wyh.mapper.groupOne.resource;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wyh.domain.dto.groupOne.resource.PaymentHistory;
import com.wyh.domain.po.groupOne.contractManagement.MasterDataContract;
import com.wyh.domain.po.groupOne.contractManagement.Contractitem;
import com.wyh.domain.dto.groupOne.resource.ResourceCustomerDTO;
import com.wyh.domain.po.groupOne.organization.MasterDataOrganization;
import com.wyh.domain.po.groupOne.projectabout.BuildingunitsPO;
import com.wyh.domain.po.groupOne.projectabout.ProjectPO;
import com.wyh.domain.po.groupOne.resource.MasterDataResource;
import com.wyh.domain.po.groupOne.threemeterAbout.Threemeter;
import com.wyh.domain.po.groupOne.threemeterAbout.Threemeter_Reading;
import com.wyh.domain.vo.groupOne.threemeterTree.MasterDataLayerVO_1;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;
import java.util.List;

public interface MasterDataResourceMapper extends BaseMapper<MasterDataResource> {
    /**
     * 查询所有
     * @param masterDataResource
     * @return
     */
    List<MasterDataResource> selectAll(MasterDataResource masterDataResource);

    /**
     * 修改
     */
    int updateById(MasterDataResource masterDataResource);
    /*
    * 新增
    * */
    int insertResource(MasterDataResource masterDataResource);
    /**
     * 根据ID查询
     */
    MasterDataResource selectById(Integer id);
    /**
     * 删除
     */
    int deleteById(Integer id);

    // 根据资源名称查询资源
    MasterDataResource selectByName(@Param("name1") String name, @Param("buildingid1") Integer buildingid);

    /* 向下查询*/
    /*查询组织*/
    List<MasterDataOrganization> selectAllOrganization(Integer id);
    /*查询园区*/
    List<ProjectPO> selectAllProject(@Param("ids") List<Integer> ids);
    /*查询楼盘*/
    List<ProjectPO> selectAllHouse(@Param("ids") List<Integer> ids);
    /*查询组织下楼盘*/
    List<ProjectPO> selectAllOrganizationHouse(@Param("ids") List<Integer> ids);
    /*查询楼栋*/
    List<BuildingunitsPO> selectAllBuildingunits(@Param("ids") List<Integer> ids);
    /*查询楼层*/
    List<MasterDataLayerVO_1> selectAllLayer(@Param("ids") List<Integer> ids);
    /*查询资源*/
    List<MasterDataResource> selectAllResource(@Param("ids") List<Integer> ids);


    /*向上查询*/
    /*查询上级组织*/
    MasterDataOrganization selectOrganization(Integer id);
    /*查询上级园区*/
    ProjectPO selectProject(Integer id);
    /*查询上级楼盘*/
    ProjectPO selectHouse(Integer id);
    /*查询*/
    ProjectPO selectOrganizationHouse(Integer id);
    /*查询上级楼栋*/
    BuildingunitsPO selectBuilding(Integer id);
    /**/
    MasterDataLayerVO_1 selectLayer(Integer id);

    @Update("UPDATE resource SET infoname = #{infoname} WHERE id = #{id}")
    int updateInfoname(@Param("id") int id, @Param("infoname") String infoname);

    // 根据id修改最后修改人和最后修改时间的方法
    int updateModifierAndTime(MasterDataResource masterDataResource);

    // 根据资源id查询缴费记录的方法
    List<PaymentHistory> selectCharging(PaymentHistory paymentHistory);

    // 根据资源id查询详情中的三表信息的方法
    List<Threemeter> selectThreemeterInfo(@Param("id") Integer id);

    // 根据三表信息查询读数的方法
    Double selectReading(@Param("id") Integer meterid, @Param("time") LocalDateTime time);

    // 停用三表信息的方法
    int deleteThreemeterInfo(Integer threemeterId);

    // 资源管理三表换标的方法(记录旧表读数)
    int insertOldThreemeter(Threemeter_Reading threemeterReading);

    // 资源管理中插入新表的方法（换新表）
    int insertThreemeter(Threemeter threemeter);

    // 根据三表id查询三表信息的方法
    Threemeter selectThreemeter(Integer id);

    // 根据原表id查询合同费项的方法
    List<Contractitem> selectContractItem(Integer meterid);

    // 根据合同费项id查找合同费项的方法
    Contractitem selectContractItemById(Integer id);

    // 根据合同费项id查询合同状态的方法
    MasterDataContract selectContract(Integer contractid);

    // 插入新表关联的合同费项
    int insertContractItem(Contractitem contractitem);

    // 根据三表id修改表中的code的值的方法
    int updateCodeById(Integer id);
    //查询当前资源楼层下所有资源
    List<MasterDataResource> selectLayerAllResource(Integer id);
    //查询资源下的客户信息
    List<ResourceCustomerDTO> selectResourceCustomer(Integer id);
    //查询资源下的客户的历史信息
    List<ResourceCustomerDTO> selectResourceCustomerHistory(Integer id);
}
